import { defineStore } from 'pinia'
import {createCompletions,createImages,wxLogin,saveChatHistory,userChatList} from '@/api/request.js'
//存储顶部导航栏下标
export const selectNavIndex = defineStore('selectNavIndex',{
	state:()=>({
		index:1,//0:我的,1:对话；2：ai绘画
	})
})

//判断登录状态  存储用户信息，存储对话记录
export const userData = defineStore('userData',{
	state:()=>({
		isLogin:false   ,//true已登录，false未登录
		userInfo:{} ,//用户记录
		chatList:[],  //聊天列表
		sessionId:'', //会话id
		newChat:true  //true是开启新会话  false原有的会话
	}),
	actions:{
		// 未登录获取用户信息
		async isNotLoggedIn(nickName,avatar,code){
			//请求接口
			const result = await wxLogin({nickName,avatar,code})
			console.log(result);
			//存储本地缓存
			uni.setStorageSync('userInfo',result.data)
			this.userInfo = result.data
			//请求聊天的列表
			const chatListData = await userChatList()
			this.chatList = chatListData.data
			this.isLogin = true
		},
		//  判断登录状态
		async isLoggedIn(){
			const userinfo = uni.getStorageSync('userInfo')
			this.userInfo = userinfo ? userinfo:{}
			this.isLogin = true ? true :false
			if(!userinfo) return 
			//请求聊天的列表
			const chatListData = await userChatList()
			this.chatList = chatListData.data
		}
	}
})
//文生文
export const chatbotMessage = defineStore('chatbotMessage', {
	state:()=>({
		messages:[] , //存储聊天记录
		receiveText:''   //接收大模型返回的文本数据
	}),
	actions:{
		// 接收服务器端大模型返回的数据
		async handleText(objVal){
			// console.log(objVal);
			//  服务器开始响应
			this.messages[this.messages.length - 1].finish_reason='respond'
			//  把模型返回的文本追加到receiveText
			this.receiveText +=objVal.choices[0].delta.content || ''
			//把文本追加到ai的回复中
			this.messages[this.messages.length - 1].content = this.receiveText
			// 判断是否回复完毕
			if(objVal.choices[0].finish_reason){
				//  存储状态
				this.messages[this.messages.length - 1].finish_reason=objVal.choices[0].finish_reason
				// 如果有联网查询的数据
				this.messages[this.messages.length - 1].web_search = objVal.web_search ? objVal.web_search : []
				//如果回复异常
				const condition=[
					{type:'length',content:'到达token上限，请重新开始新会话'},
					{type:'sensitive',content:'非常抱歉，我无法提供你需要的具体信息'},
					{type:'network_error',content:'推理异常，我或许出现了一些问题，你可以重新尝试'},
				]
				condition.forEach(item=>{
					if(objVal.choices[0].finish_reason === item.type){
						this.messages[this.messages.length - 1].content=item.content
					}
				})
				// 对话完毕
				inProgress().value=false
				// console.log(this.messages);
				// 存储聊天记录
				const uploadChat = [...this.messages.slice(-2)]
				const result = await saveChatHistory({
					messages:uploadChat,
					essionId:userData().sessionId
				})
				// console.log(result)
				if(userData().newChat){
					userData().chatList.unshift(result.data)
					userData().sessionId = result.data.session_id
					userData().newChat = false 
				}
			}
		},
		// 发送数据到服务器端
		async startSending(content){//content就是发送的值
			this.receiveText=''  //清空上一次的结果
			this.messages.push({"role":"user",content})
			this.messages.push({"role":"assistant",
			"content":"",
			"finish_reason":"start",
			"web_search":[], //搜索网页返回的结果
			})
			// 对话正在进行中
			inProgress().value=true
			/*
			finish_reason:
			'stop’表示自然结束或触发stop词，
			"respond"表示ai响应中
			'tool_calls’表示模型命中函数，
			'length’表示达到token长度限制，
			'sensitive’表示内容被安全审核接口拦截（用户应判断并决定是否撤回公开内容），
			'network_error’表示模型推理异常。
			*/
		   //请求服务器端进行发送
		   try{
		   	await createCompletions({messages:this.messages})
		   }catch(err){
		   	this.messages[this.messages.length - 1].finish_reason = 'stop'
			this.messages[this.messages.length - 1].content = 'AI回复异常，请重试'
			console.log(err);
			//对话结束
			inProgress().value=false
		   }
		}
	}
})


//文生图
export const chatCreateImages = defineStore('chatCreateImages',{
	state:()=>({
		messages:[],//url;prompt
	}),
	actions:{
		//开始发送
		async seartSending(content){
			console.log(content);
			this.messages = [
				{
					url:'',
					prompt:'ai正在绘图中...'
				}
			]
			inProgress().value = true
			try{
				const res = await createImages({prompt:content})
				// console.log(res);
				let aimessages = this.messages[0]
				if(res.serviceCode==200){
					aimessages.url = res.data.url
				}else{
					aimessages.url = ''
				}
				aimessages.prompt = res.data.prompt  || res.msg || '当前生成图片出错，你可重试'
				inProgress().value = false
			}catch(err){
				this.messages = [{
					url:'',
					prompt:'当前生成图片出错，你可重试'
				}]
				inProgress().value = false
			}
		}
	}
})

//  查询对话是否进行中
export const inProgress = defineStore('inProgress',{
	state:()=>({
		value:false,  //false表示对话完毕, true:正在进行中
	}),
	actions:{
		queryValue(){
			if(this.value){
				uni.showToast({
					icon:'none',
					title:'当前业务正在进行中，请稍后'
				})
				return true
			}
		}
	}
})